﻿using System;
using System.Data.Common;
using System.Data.Entity;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using PortalWeb.Core.IDao;

namespace PortalWeb.Dao
{
    public interface IDbBaserSession
    {
        int SaveChanges();

        int ExcuteSql(string strSql, DbParameter[] parameters);

        IRoleStore<IdentityRole> RoleStore { get; }

        IUserStore<IdentityUser> UserStore { get; }
    }

    //一次跟数据库交互的会话
    public partial class DbBaseSession : IDbBaserSession //代表应用程序跟数据库之间的一次会话，也是数据库访问层的统一入口
    {

        protected DbContext DbContext;

        public DbBaseSession(DbContext dbContext)
        {
            DbContext = dbContext;
        }

        public DbContext GetDbContext()
        {
            return DbContext;
        }

        //代表：当前应用程序跟数据库的会话内所有的实体的变化，更新会数据库
        public int SaveChanges()
        {
            //调用EF上下文的SaveChanges方法
            return DbContext.SaveChanges();
        }

        //执行Sql脚本的方法
        public int ExcuteSql(string strSql, System.Data.Common.DbParameter[] parameters)
        {
            //Ef4.0的执行方法 ObjectContext
            //封装一个执行SQl脚本的代码
            //return DAL.EFContextFactory.GetCurrentDbContext().ExecuteFunction(strSql, parameters);
            throw new NotImplementedException();
            
        }

        public IRoleStore<IdentityRole> RoleStore { get; }
        public IUserStore<IdentityUser> UserStore { get; }
    }
}